
Emma Foster
Machine Learning Engineer

EasySpider 是一个功能强大的可视化网络爬虫工具,允许任何人通过无需编写代码的设计和执行浏览器自动化任务。其直观的流程图界面使其对非程序员易于使用,同时为开发人员提供高级功能。
CapSolver 通过提供无缝的验证码解决功能,完善了 EasySpider 的自动化体验。虽然 EasySpider 支持多种验证码识别方案,但集成 CapSolver 的人工智能解决方案可以确保可靠、快速地绕过 reCAPTCHA、Cloudflare Turnstile 和其他验证码挑战。
EasySpider 是一个免费、开源的可视化网络爬虫和浏览器自动化工具。与需要编程知识的传统爬虫库不同,EasySpider 让您通过点击网页元素来设计任务。
EasySpider 基于三个基本原则运行:
| 功能 | 描述 |
|---|---|
| 无限循环嵌套 | 处理复杂的分页和多级数据提取 |
| 条件分支 | 根据页面内容创建决策点 |
| 中断语句 | 在流程图中的任何位置退出循环 |
| 正则表达式 | 使用模式匹配提取数据 |
| OCR 识别 | 从图像和截图中提取文本 |
| 代理支持 | 旋转 IP 地址和隧道连接 |
CapSolver 是一个领先的验证码解决服务,提供人工智能驱动的解决方案来绕过各种验证码挑战。支持多种验证码类型和闪电般的响应时间,CapSolver 可无缝集成到自动化工作流中。
虽然 EasySpider 提供了内置的验证码支持,但集成 CapSolver 有显著优势:
EasySpider_windows_x64.zip 用于 64 位 WindowsEasySpider_windows_x86.zip 用于 32 位 WindowsEasySpider_MacOS.dmg 用于 macOSEasySpider_Linux_x64.tar.gz 用于 LinuxEasySpider.exe(Windows)或相应的可执行文件注意:确保端口 8084 可用于进程间通信。
如果您计划使用 CapSolver 辅助脚本:
pip install requests
以下是一个专为 Python 工作流设计的可重用 CapSolver 工具类:
import requests
import time
from typing import Optional
from dataclasses import dataclass
CAPSOLVER_API_KEY = 'YOUR_CAPSOLVER_API_KEY'
@dataclass
class TaskResult:
status: str
solution: Optional[dict] = None
error_description: Optional[str] = None
class CapSolverService:
def __init__(self, api_key: str = CAPSOLVER_API_KEY):
self.api_key = api_key
self.base_url = 'https://api.capsolver.com'
def create_task(self, task_data: dict) -> str:
response = requests.post(
f'{self.base_url}/createTask',
json={
'clientKey': self.api_key,
'task': task_data
}
)
data = response.json()
if data.get('errorId', 0) != 0:
raise Exception(f"CapSolver 错误: {data.get('errorDescription')}")
return data['taskId']
def get_task_result(self, task_id: str, max_attempts: int = 60) -> TaskResult:
for _ in range(max_attempts):
time.sleep(2)
response = requests.post(
f'{self.base_url}/getTaskResult',
json={
'clientKey': self.api_key,
'taskId': task_id
}
)
data = response.json()
if data.get('status') == 'ready':
return TaskResult(
status='ready',
solution=data.get('solution')
)
if data.get('status') == 'failed':
raise Exception(f"任务失败: {data.get('errorDescription')}")
raise Exception('等待验证码解决方案超时')
def solve_recaptcha_v2(self, website_url: str, website_key: str) -> str:
task_id = self.create_task({
'type': 'ReCaptchaV2TaskProxyLess',
'websiteURL': website_url,
'websiteKey': website_key
})
result = self.get_task_result(task_id)
return result.solution.get('gRecaptchaResponse', '') if result.solution else ''
def solve_turnstile(
self,
website_url: str,
website_key: str,
action: Optional[str] = None,
cdata: Optional[str] = None
) -> str:
task_data = {
'type': 'AntiTurnstileTaskProxyLess',
'websiteURL': website_url,
'websiteKey': website_key
}
if action or cdata:
metadata = {}
if action:
metadata['action'] = action
if cdata:
metadata['cdata'] = cdata
task_data['metadata'] = metadata
task_id = self.create_task(task_data)
result = self.get_task_result(task_id)
return result.solution.get('token', '') if result.solution else ''
# 全局实例
capsolver = CapSolverService()
EasySpider 提供了多种集成 CapSolver 的方式。选择最适合您用例的方法。
EasySpider 支持在工作流中执行自定义 JavaScript。这是最直接的集成方法。
步骤 1:在 EasySpider 中创建一个新任务并导航到受验证码保护的页面
步骤 2:添加一个“自定义操作”节点,使用以下 JavaScript:
// 从 reCAPTCHA 元素中提取 sitekey
var siteKey = document.querySelector('.g-recaptcha').getAttribute('data-sitekey');
var pageUrl = window.location.href;
// 存储以供下一步使用
window.captchaSiteKey = siteKey;
window.captchaPageUrl = pageUrl;
// 用于调试的日志
console.log('Site Key:', siteKey);
console.log('Page URL:', pageUrl);
步骤 3:使用 EasySpider 的外部系统调用功能调用一个 Python 脚本以解决验证码并返回令牌
步骤 4:添加另一个“自定义操作”节点以注入令牌:
// 令牌将从外部脚本传递
var token = arguments[0]; // 从 EasySpider 传递
// 显示响应文本区域并设置令牌
document.getElementById('g-recaptcha-response').style.display = 'block';
document.getElementById('g-recaptcha-response').value = token;
// 如果有回调函数,执行它
if (typeof ___grecaptcha_cfg !== 'undefined') {
var clients = ___grecaptcha_cfg.clients;
if (clients) {
Object.keys(clients).forEach(function(key) {
var client = clients[key];
if (client.callback) {
client.callback(token);
}
});
}
}
这是一个使用 EasySpider 可视化节点的无代理 Turnstile 工作流。它不需要代理。
步骤 1:创建一个新任务并导航到受 Turnstile 保护的页面。
步骤 2:添加三个 自定义操作 节点(代码模式 = JavaScript)以捕获 Turnstile 元数据:
// 节点标题: TS_SiteKey
return document.querySelector('.cf-turnstile')?.getAttribute('data-sitekey') || '';
// 节点标题: TS_Action(可选)
return document.querySelector('.cf-turnstile')?.getAttribute('data-action') || '';
// 节点标题: TS_Cdata(可选)
return document.querySelector('.cf-turnstile')?.getAttribute('data-cdata') || '';
步骤 3:添加一个 执行系统命令 节点以使用 CapSolver 解决 Turnstile:
python captcha_solver.py "{{current_url}}" "Field[\"TS_SiteKey\"]" "turnstile" "Field[\"TS_Action\"]" "Field[\"TS_Cdata\"]"
将此节点命名为 Token,以便以后引用其输出为 Field["Token"]。
步骤 4:添加一个 自定义操作 节点(JavaScript)以注入令牌:
var token = `Field["Token"]`;
var inputs = document.querySelectorAll('input[name="cf-turnstile-response"], input[name="turnstile-response"]');
inputs.forEach(function(el) {
el.value = token;
el.dispatchEvent(new Event('input', { bubbles: true }));
el.dispatchEvent(new Event('change', { bubbles: true }));
});
步骤 5:点击表单提交按钮(或使用 JS 提交)。
注意:无代理的 Turnstile 在许多网站上有效,但某些部署会将令牌与求解器 IP 进行验证。如果发生这种情况,则需要使用代理求解。
对于高级用户,可以直接扩展 EasySpider 的 Python 执行引擎。easyspider_executestage.py 脚本处理任务执行,并可以修改以包含 CapSolver 集成。
位置:{EasySpider_Directory}/Code/easyspider_executestage.py
将 CapSolver 服务添加到执行上下文中:
# 添加到 easyspider_executestage.py 的顶部
import requests
import time
# 添加 CapSolver 类
class CapSolverService:
# ... (实现如上)
pass
# 创建全局实例
capsolver = CapSolverService('YOUR_CAPSOLVER_API_KEY')
# 现在可以在 eval/exec 块中使用 capsolver.solve_recaptcha_v2()
然后在您的 EasySpider 任务中,使用“执行 Python 代码”功能:
# 在 EasySpider 的 Python 执行块中
site_key = driver.find_element_by_class_name('g-recaptcha').get_attribute('data-sitekey')
token = capsolver.solve_recaptcha_v2(current_url, site_key)
driver.execute_script(f'''
document.getElementById('g-recaptcha-response').value = `{token}`;
''')
import time
from functools import wraps
from typing import Callable, TypeVar, Any
T = TypeVar('T')
def retry(max_retries: int = 3, exponential_backoff: bool = True):
"""带指数退避的重试逻辑装饰器。"""
def decorator(func: Callable[..., T]) -> Callable[..., T]:
@wraps(func)
def wrapper(*args: Any, **kwargs: Any) -> T:
last_exception = None
for attempt in range(max_retries):
try:
return func(*args, **kwargs)
except Exception as e:
last_exception = e
if attempt < max_retries - 1:
delay = (2 ** attempt) if exponential_backoff else 1
print(f'尝试 {attempt + 1} 失败,将在 {delay} 秒后重试...')
time.sleep(delay)
raise last_exception
return wrapper
return decorator
@retry(max_retries=3, exponential_backoff=True)
def solve_with_retry(capsolver, url: str, site_key: str) -> str:
return capsolver.solve_recaptcha_v2(url, site_key)
def check_balance(api_key: str) -> float:
response = requests.post(
'https://api.capsolver.com/getBalance',
json={'clientKey': api_key}
)
data = response.json()
return data.get('balance', 0)
def main():
balance = check_balance(CAPSOLVER_API_KEY)
if balance < 1:
print('警告:CapSolver 余额不足!请充值。')
else:
print(f'当前余额:${balance:.2f}')
从命令行运行 EasySpider 任务:
# 基本执行
python easyspider_executestage.py --id [task_id] --read_type local --headless 1
# 带完整参数
python easyspider_executestage.py \
--ids [0] \
--server_address http://localhost:8074 \
--config_folder "./" \
--headless 1 \
--read_type local
以下是创建包含 CapSolver 集成的完整 EasySpider 工作流的步骤:
https://www.google.com/recaptcha/api2/demo)将此保存为captcha_solver.py文件到你的EasySpider目录中:
#!/usr/bin/env python3
"""
CapSolver辅助脚本用于EasySpider
用法:python captcha_solver.py <url> <site_key> <captcha_type> [action] [cdata]
"""
import sys
import requests
import time
CAPSOLVER_API_KEY = 'YOUR_CAPSOLVER_API_KEY'
def solve_captcha(url, site_key, captcha_type='recaptcha_v2', action=None, cdata=None):
"""解决CAPTCHA并返回令牌。"""
if captcha_type == 'recaptcha_v2':
task_type = 'ReCaptchaV2TaskProxyLess'
elif captcha_type == 'turnstile':
task_type = 'AntiTurnstileTaskProxyLess'
else:
raise ValueError(f'未知的CAPTCHA类型: {captcha_type}')
# 创建任务
task = {
'type': task_type,
'websiteURL': url,
'websiteKey': site_key
}
if captcha_type == 'turnstile' and (action or cdata):
metadata = {}
if action:
metadata['action'] = action
if cdata:
metadata['cdata'] = cdata
task['metadata'] = metadata
response = requests.post(
'https://api.capsolver.com/createTask',
json={
'clientKey': CAPSOLVER_API_KEY,
'task': task
}
)
data = response.json()
if data.get('errorId', 0) != 0:
raise Exception(f"错误: {data.get('errorDescription')}")
task_id = data['taskId']
# 轮询结果
for _ in range(60):
time.sleep(2)
response = requests.post(
'https://api.capsolver.com/getTaskResult',
json={
'clientKey': CAPSOLVER_API_KEY,
'taskId': task_id
}
)
data = response.json()
if data.get('status') == 'ready':
solution = data.get('solution', {})
return solution.get('gRecaptchaResponse') or solution.get('token')
if data.get('status') == 'failed':
raise Exception(f"失败: {data.get('errorDescription')}")
raise Exception('超时')
if __name__ == '__main__':
if len(sys.argv) < 3:
print('用法: python captcha_solver.py <url> <site_key> [captcha_type] [action] [cdata]')
sys.exit(1)
url = sys.argv[1]
site_key = sys.argv[2]
captcha_type = sys.argv[3] if len(sys.argv) > 3 else 'recaptcha_v2'
action = sys.argv[4] if len(sys.argv) > 4 else None
cdata = sys.argv[5] if len(sys.argv) > 5 else None
try:
token = solve_captcha(url, site_key, captcha_type, action, cdata)
print(token) # 输出令牌供EasySpider捕获
except Exception as e:
print(f'ERROR: {e}', file=sys.stderr)
sys.exit(1)
在你的EasySpider工作流中,添加一个“执行系统命令”节点:
python captcha_solver.py "{{current_url}}" "{{site_key}}" "recaptcha_v2"
对于Turnstile(无代理):
python captcha_solver.py "{{current_url}}" "{{site_key}}" "turnstile" "{{action}}" "{{cdata}}"
输出(令牌)可以被捕获并在后续的JavaScript注入步骤中使用。
将CapSolver与EasySpider集成创建了一个强大的可视化网页自动化组合。EasySpider直观的流程图界面使任务设计对所有人都易于使用,而CapSolver则处理原本会阻止自动化的验证码挑战。
这种集成的关键优势包括:
无论你是构建数据提取管道、监控系统还是自动化测试框架,EasySpider + CapSolver组合提供了现代网页自动化的可视化设计体验和验证码解决能力。
准备好开始了吗? 注册CapSolver 并使用优惠码 EASYSPIDER 在首次充值时获得额外6%的奖励!
EasySpider是一款免费、开源的可视化网页抓取和浏览器自动化工具。它允许用户通过图形化流程图界面设计自动化任务,而无需编写代码,同时支持自定义JavaScript、Python代码和Selenium语句以满足高级用例。
CapSolver通过多种方法与EasySpider集成:在EasySpider工作流中的自定义JavaScript注入、通过系统命令调用的外部Python脚本,或直接修改EasySpider的Python执行引擎。所有方法都使用CapSolver的API来解决验证码并将令牌注入页面。
EasySpider内置了一些验证码识别方案和OCR功能。然而,与CapSolver集成可以提供更高的成功率、更快的解决速度以及更广泛的验证码类型覆盖,适用于生产自动化工作流。
CapSolver支持多种验证码类型,包括reCAPTCHA v2、reCAPTCHA v3、Cloudflare Turnstile、AWS WAF、GeeTest v3/v4等。
CapSolver根据解决的验证码类型和数量提供具有竞争力的定价。访问capsolver.com查看当前定价详情。使用代码EASYSPIDER可获得首次充值的5%奖励。
是的,EasySpider完全免费,采用AGPL-3.0许可证开源。该软件允许免费商业使用和修改。网络服务部署必须向用户提供源代码访问权限。
site key通常在页面的HTML源代码中找到:
.g-recaptcha元素的data-sitekey属性.cf-turnstile元素的data-sitekey属性是的,EasySpider支持通过easyspider_executestage.py进行命令行执行。这使得与其他系统的集成、计划任务执行和无头自动化成为可能。
EasySpider支持Windows(x64/x86)、macOS和Linux。从GitHub发布页面下载相应版本。
是的,EasySpider支持代理IP配置和隧道切换。您可以在任务设置中配置代理,或通过EasySpider的浏览器启动选项进行配置。